

function removeElements(arr1, arr2) {
    const map = {};
    // 将 arr2 中的元素存入 map 中，记录出现次数
    for (const num of arr2) {
        if (map[num]) {
            map[num]++;
        } else {
            map[num] = 1;
        }
    }

    // 遍历 arr1，如果当前元素在 map 中出现过且次数大于 0，则删除该元素
    return arr1.filter(num => {
        if (map[num] && map[num] > 0) {
            map[num]--;
            return false;
        }
        return true;
    });
}
let permute = (nums) => {
    let res = []
    dfs([])
    function dfs(path) {
        if (path.length === nums.length) {
            res.push([...path])
            return
        }

        let other = removeElements(nums, path)
        for (let i = 0; i < other.length; i++) {
            path.push(other[i])
            dfs(path)
            path.pop()
        }
    }
    return res
}





// let permute = (nums) => {
//     let res = []
//     dfs([])
//     function dfs(path) {
//         if (path.length === nums.length) {
//             res.push([...path])
//             return
//         }
//         for (let i = 0; i < nums.length; i++) {
//             if (path.includes(nums[i])) {
//                 continue
//             }
//             path.push(nums[i])
//             dfs(path)
//             path.pop()
//         }
//     }
//     return res
// }
